package com.example.springbootmybatis.tools;

/**
 * OperationResult返回消息
 *
 * @author Luffy Zhang
 * @date 2017-06-07
 */
public enum CodeMessage {

    /**
     * 返回信息
     * 命名规则：(E/S) + 形容词 + 名称;可以适当采用英文缩写
     */
    S_SUCCESS(0, "操作成功"),
    S_EMPTY(1, "查询数据为空"),
    E_ERROR(-1, "操作失败"),
    E_SESSION_TIMEOUT(-2, "会话已过期"),
    E_UNDEFINED_ERROR(10, "未定义的错误"),
    /**
     * 系统错误 1000 - 1999
     */
    E_SYSTEM_ERROR(1000, "系统内部错误"),
    E_INVALID_PARAM(1001, "参数无效"),
    E_NULL_PARAM(1002, "参数为NULL"),
    E_NULL_PARAM_PROPERTY(1003, "参数属性为NULL"),
    E_EMPTY_PARAM_PROPERTY(1004, "参数属性为空"),
    E_INVALID_PARAM_TYPE(1005, "参数数据类型错误"),
    E_PART_NULL_PARAM(1006, "请填写"),
    E_INVALID_DB_OPERATION(1100, "数据操作异常"),
    E_FILE_UPLOAD_ERROR(1200, "文件上传失败"),
    E_FILE_UPLOAD_CHECK_ERROR(1201, "上传文件验证失败，请重新上传"),
    /**
     * 业务级别错误 2000 - 5999
     */
    E_ERROR_DELETE_MENU(2000, "删除菜单失败，请先删除菜单下页面"),
    E_ERROR_DELETE_PAGE(2001, "删除页面失败，请先删除页面下功能点"),
    E_ERROR_EXIST_NAME(2010, "该名称已存在"),
    E_ERROR_DELETE_COMPANY(2012, "存在下属部门，该公司无法删除"),
    E_ERROR_DELETE_DEPARTMENT(2013, "删除失败，该部门下存在子部门"),
    E_ERROR_DELETE_DEPARTMENT_EMPLOYEE(2014, "删除失败，该部门下存在员工"),
    E_ERROR_EXIST_EMAIL(2015, "email已存在"),
    E_ERROR_FORMAT_EMAIL(2017, "email格式错误"),
    E_ERROR_EXIST_MOBILE(2016, "手机号已存在"),
    E_ERROR_EXIST_IDNUMBER(2027, "身份证号码已存在"),
    E_ERROR_FORMAT_MOBILE(2018, "手机号码不正确"),
    E_ERROR_FORMAT_IDNUMBER(2019, "身份证格式错误"),
    E_ERROR_CHOOSE_CITY(2020, "请选择城市"),

    /**
     * 登录错误 2020 - 2049
     */
    E_ERROR_LOING_VALIDATECODE(2020, "用户验证码输入错误!"),
    E_ERROR_ACCOUNTNUMBER(2021, "用户账号输入错误!"),
    E_ERROR_PASSWORD(2022, "用户密码输入错误!"),
    E_ERROR_VALIDATECODE(2023, "获取验证码失败!"),
    S_SUCCESS_VALIDATECODE(2024, "获取验证码成功!"),
    S_SUCCESS_LOGOUT(2025, "用户退出成功!"),
    S_SUCCESS_LOGIN(2026, "用户登录成功!"),
    E_ERROR_ORIGINAL_PASSWORD(2027, "用户原密码输入错误!"),
    E_ERROR_MODIFY_PASSWORD(2028, "修改用户密码失败!"),
    /**
     * 供应商错误 2050 - 2100
     */
    E_ERROR_SUPPLIERNAME_REPEAT(2050, "供应商名称重复, 不可使用!"),
    E_SUCCESS_SUPPLIERNAME(2051, "供应商名称可以使用!"),
    E_ERROR_SUPPLIEREMAIL_REPEAT(2052, "供应商登录邮箱重复, 不可使用!"),
    E_SUCCESS_SUPPLIEREMAIL(2053, "供应商登录邮箱可以使用!"),
    E_ERROR_EXIST_CONFIG(2054, "该供应商配置已存在！"),
    E_ERROR_PRICE_COUNT(2055, "阶梯报价至少两条！"),

    /**
     * 产品错误 2101-2150
     */
    E_ERROR_PRODUCT_PRODOUCTID(2101, "产品ID不能为空！"),
    E_ERROR_IN_COOPERATION(2102, "产品处于合作中，不可删除！"),

    /**
     * 增员险种问题2151-2200
     */
    E_ERROR_POLICY_ADD_INSURANCE(2151, "增员险种起始时间不符合要求! "),
    /**
     * 补缴险种问题2201-2250
     */
    E_ERROR_EXIST_POLICY(2201, "存在相同政策,请删除原政策！"),
    /**
     * 产品配置问题2251-2300
     */
    E_ERROR_EXIST_CITY(2251, "该城市已经开通！"),


    /**
     * 附件配置问题2301-2350
     */
    E_ERROR_IMG_BUSIID(2301, "附件业务ID不能为空"),
    E_ERROR_IMG_CGROUP(2302, "附件分组名不能为空"),
    E_ERROR_IMG_URL(2303, "附件路径不能为空"),
    E_ERROR_IMG_OPERID(2304, "附件操作人ID不能为空"),
    E_ERROR_IMG_OPERNAME(2305, "操作人姓名不能为空"),
    /**
     * 追踪配置问题2351-2370
     */
    E_ERROR_TRACE_BUSIID(2351, "业务ID不能为空"),
    E_ERROR_TRACE_CGROUP(2352, "分组名不能为空"),
    E_ERROR_TRACE_SEND_ID(2353, "发送人ID不能为空"),
    E_ERROR_TRACE_SEND_NAME(2354, "发送人名称不能为空"),
    E_ERROR_TRACE_ATTEN_ID(2355, "@人ID不能为空"),
    E_ERROR_TRACE_ATTEN_NAME(2356, "@人名称不能为空"),
    E_ERROR_TRACE_MESSAGE(2357, "消息内容不能为空"),
    E_ERROR_TRACE_ATTEN_TYPE(2358, "@类型不能为空"),
    E_ERROR_OPERID_CGROUP(2359, "当前登陆者不能为空"),
    /**
     * 单位子账号2371-2400
     */
    E_ERROR_COMPANY_NOTOK(2371, "单位已锁定"),
    E_ERROR_COMPANY_SUB_ACCOUNT_REPEATE(2372, "单位子账号重复"),
    E_ERROR_COMPANY_NOT_LOCK(2373, "请先关闭合同再锁定"),

    /**
     * 合同管理 2401-2420
     */
    S_SUCCESS_DELETE(2401, "没有可以删除的数据"),
    E_ERROR_USED(2402, "套餐或单项正在使用，无法删除"),

    /**
     * 前道申报2421-2450
     */
    E_BEFORE_APPLY_ADD(2421, "当前城市业务未开通!"),
    E_BEFORE_APPLY_SOCIAL_REPEAT(2422, "社保已参保，暂无法申报"),
    E_BEFORE_APPLY_FUND_REPEAT(2423, "公积金已参保，暂无法申报"),
    E_BEFORE_APPLY_PAY_ERROR(2424, "计算金额有误, 请重新核验!"),
    E_ERROR_BACK_NOT(2425, "不允许补缴"),
    E_ERROR_DATA(2426, "数据错误"),
    E_BEFORE_APPLY_INFO_EXPIRED(2427, "申报信息已经过期!"),
    E_BEFORE_APPLY_NO_PACKAGE(2428, "没有可使用的政策包!"),
    E_BEFORE_APPLY_NO_ADJUSTMONTH(2429, "未在调基开放月，暂无法申报!"),
    E_BEFORE_SOCIAL_NO_ADJUSTMONTH(2430, "社保在该申报月已经调基过!"),
    E_BEFORE_FUND_NO_ADJUSTMONTH(2431, "公积金在该申报月已经调基过!"),
    E_BEFORE_NO_PACKAGE(2432, "没有可使用的政策包!"),
    E_BEFORE_NO_PRODUCT(2433, "当前地区没有可使用的产品!"),
    E_BEFORE_APPLY_SOCIAL_REAPPLY(2434, "社保已参保，暂无法申报"),
    E_BEFORE_APPLY_FUND_REAPPLY(2435, "公积金已参保，暂无法申报"),
    E_BEFORE_NO_INSURANCES(2436, "当前政策包暂无险种!"),
    E_BEFORE_NO_RULEA(2437, "当前政策包暂无规则!"),
    E_BEFORE_REJECT_EMPTY(2438, "导入文件没有数据!"),
    E_BEFORE_NO_SUPPLIER(2439, "没有可使用的供应商!"),
    E_BEFORE_NO_FUND(2440, "没有公积金申报数据!"),
    E_BEFORE_APPLY_NO_B_PACKAGE(2441, "没有可使用的补缴规则!"),
    E_BEFORE_APPLY_NO_ADD(2442, "公积金和社保已经申报, 不能重复申报!"),
    E_BEFORE_NO_B_PACKAGE(2443, "没有可使用的补缴政策包!"),
    E_BEFORE_NO_T_ADJUSTMONTH(2444, "当月处于增员或处于减员中，当月无法调基!"),
    E_BEFORE_NO_SOCIAL(2445, "没有社保申报数据!"),
    E_BEFORE_APPLY_SOCIAL_FUND_REAPPLY(2446, "公积金和社保已参保, 不能重复申报!"),
    E_BEFORE_NO_PROJECT(2447, "没有项目信息!"),
    E_BEFORE_REDUCE_SPECIAL(2448, "三期人员不能社保减员!"),
    E_BEFORE_REDUCE_RULE(2449, "减员规则缺失或最后缴纳月不合规!"),
    /**
     * 垫资回款 2421-2440
     */
    E_ERROR_PAD_BACK_AMOUNT_OVERFLOW(2421, "回款金额不能大于垫资金额"),
    E_ERROR_PAD_COMPANY_AMOUNT_OVERFLOW(2422, "回款金额不能大于客户余额"),
    E_ERROR_BACK_CLAIM(2423, "金额不能大于客户余额"),
    E_ERROR_BIND_MAX_CASH(2424, "绑定余额不能大于待还款金额"),
    E_ERROR_BACK_PAD_CASH(2425, "绑定余额不等于代还款金额加上垫资待还款金额"),
    E_ERROR_PAD_MAX_CASH(2426, "垫资金额不能大于账单待还款金额"),
    E_ERROR_BIND_EXIST(2427, "该回款凭证已经使用"),
    E_ERROR_BIND_REPEAT(2428, "该回款凭证回款记录中重复"),
    E_ERROR_BIND_AMOUNT_OVERFLOW(2429, "回款金额大于待还款金额"),

    /**
     * 月结单 2441-2460
     */
    E_ERROR_FINAREPORT_PREFER_OVERFLOW(2441, "优惠总金额不能大于服务费"),
    E_ERROR_EXIST_FINAREPORT(2442, "当月月结单已存在！"),

    /**
     * 派单表 2461-2480
     */
    E_ERROR_BEFORE(2461, "预生成派单表不可作为交接"),

    /**
     * 后道大库 2481-2500
     */
    E_BEFORE_APPLY_SETUP(2481, "仅申报中未核销的增员补缴可以核销"),
    E_ERROR_FRONT_CHECKSTATUS(2482, "仅申报中未核销/人工已核的在缴信息才能设置人工核销"),

    /**
     * 减员 2501-2510
     */
    E_ERROR_NOT_FOUND_RULE(2501, "减员规则不存在或不完整,或供应商减员信息缺失"),
    E_ERROR_NOT_SOCIAL_RULE(2502, "社保最后缴纳月不合法"),
    E_ERROR_NOT_FUND_RULE(2503, "公积金最后缴纳月不合法"),
    E_ERROR_NOT_SOCIAL_CANT(2504, "社保是本月增员或处于减员中"),
    E_ERROR_NOT_FUND_CANT(2505, "公积金是本月增员或处于减员中"),
    E_ERROR_NOT_SPECIAL(2508, "三期人员不得减员"),
    /**
     * 批量补缴2511-2530
     */
    E_ERROR_ADD_TEMPLATE_ERROR(2511, "请使用增员模板!"),
    E_ERROR_BACK_TEMPLATE_ERROR(2512, "请使用补缴模板!"),
    E_ERROR_CONTENT_ERROR(2513, "无此用户，或正在补缴中"),
    /**
     * 后道申报 2531-2560
     */
    E_ERROR_APPLY_APPROVE(2531, "申报所属月不正确或已超截止日期"),
    E_ERROR_APPLY_REDUCE(2532, "减员规则不完整或者最后缴纳月不合法"),
    E_ERROR_SUBSCRIPTION(2533, "政策包或实缴政策有误，请完善"),
    E_ERROR_BASE_NO(2534, "基数范围不符合实缴政策"),
    E_ERROR_APPLY_APPROVE_BACK_01(2535, "补缴实缴供应商为空"),
    E_ERROR_APPLY_APPROVE_BACK_02(2536, "增员险种不完善"),
    E_ERROR_APPLY_APPROVE_BACK_03(2537, "补缴数据重复"),
    E_ERROR_APPLY_APPROVE_BACK_04(2538, "单增带补, 补缴数据异常"),
    E_ERROR_APPLY_APPROVE_BACK_05(2539, "单补数据异常"),
    E_ERROR_APPLY_APPROVE_BACK_06(2540, "补缴供应商实缴未配置"),
    E_ERROR_APPLY_APPROVE_BACK_07(2541, "补缴_社平工资未配置"),
    E_ERROR_APPLY_APPROVE_BACK_08(2542, "补缴_最低工资未配置"),
    E_ERROR_APPLY_APPROVE_BACK_09(2543, "补缴_产品未配置"),
    E_ERROR_APPLY_APPROVE_BACK_10(2544, "补缴_社平工资未配置"),
    E_ERROR_APPLY_APPROVE_BACK_11(2545, "补缴_最低工资未配置"),
    E_ERROR_APPLY_APPROVE_BACK_12(2546, "补缴_原政策未配置"),
    E_ERROR_APPLY_APPROVE_BACK_13(2547, "补缴_新政策未配置"),
    E_ERROR_APPLY_APPROVE_BACK_14(2548, "补缴_申报月与起缴月之间相差不能超过12个月!"),
    
    /**
     * 批量审核 2560-2600
     */
    E_ERROR_BILL_AUDIT_NO(2561, "账单已进入付款流程，请将账单退回或解锁再审核此申报！"),
    E_ERROR_BILL_UNLOCK(2562, "账单已被解锁，调基申报不能通过审核"),
    E_ERROR_BILL_UNLOCK_NO(2563, "申报截止日已超期！"),

    /**
     * 账单相关 2601-2650
     */
    E_ERROR_REPORT_PAY_COMPANY(2601, "合并开票账单付款单位不一致，请重新选择！"),
    E_ERROR_REPORT_INVOICE_TYPE(2602, "合并开票账单付款税率不一致，请重新选择！"),
    E_ERROR_REPORT_STATUS_WRONG(2603, "仅待付款/已付款未开票账单可开票！"),
    E_ERROR_NO_TAXES_NUM(2604, "公司没有纳税人识别号，请重新选择或更新纳税人识别号！"),
    E_ERROR_OPEN_CASH(2605, "请填写开票金额！"),
    E_ERROR_INVOICE_NUM(2606, "请填写发票号！"),
    E_ERROR_INVOICE_SUM(2607, "已开金额必须等于申请金额！"),
    E_ERROR_NO_INVOICE_CASH(2608, "请填写开票金额！"),
    E_ERROR_WRONG_INVOICE_CASH(2609, "开票金额不得大于可开金额！"),
    E_ERROR_REPORT_SALARY(2610, "工资附件总额有误"),
    E_ERROR_REPORT_AUDIT(2611, "仅审核中账单代发工资"),
    E_ERROR_REPORT_SALARY_REPEAT(2612, "该账单已经上传代发工资"),
    E_ERROR_REPORT_SALARY_NOTFIND(2613, "未找到代发工资"),
    E_ERROR_DATE_FORMAT(2614, "日期格式错误"),


    /**
     * 增员审核报错信息2651-2680
     */
    E_ERROR_CHECK_ADD_01(2651, "增员更新失败!");

    private int code;

    private String message;

    CodeMessage(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public CodeMessage format(Object... params) {
        this.message = String.format(this.message, params);
        return this;
    }

    /**
     * 根据code获取msg
     *
     * @param code
     * @return
     */
    public static String getMessage(int code) {
        for (CodeMessage codeMessage : CodeMessage.values()) {
            if (codeMessage.getCode() == code) {
                return codeMessage.getMessage();
            }
        }
        return null;
    }

    /**
     * 根据code获取ErrorMMessage
     *
     * @param code
     * @return
     */
    public static CodeMessage getCodeMessage(int code) {
        for (CodeMessage codeMessage : CodeMessage.values()) {
            if (codeMessage.getCode() == code) {
                return codeMessage;
            }
        }
        return null;
    }

    public String getMessage() {
        return message;
    }

    public int getCode() {
        return code;
    }

}